package com.penton.util;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.util.TypedValue;

/**
 * 手机相关工具类
 * 
 * @author pengjianbo <pengjianbosoft@gmail.com>
 * 
 */
public class PhoneInfoUtil {

	/**
	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
	 */
	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}

	/**
	 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}
	
	/**
	 * 获取当前分辨率下指定单位对应的像素大小（根据设备信息）
	 * px,dip,sp -> px
	 *
	 * Paint.setTextSize()单位为px
	 *
	 * 代码摘自：TextView.setTextSize()
	 *
	 * @param unit  TypedValue.COMPLEX_UNIT_*
	 * @param size
	 * @return
	 */
	public static float getRawSize(Context c, int unit, float size) {
	       Resources r;

	       if (c == null)
	           r = Resources.getSystem();
	       else
	           r = c.getResources();

	       return TypedValue.applyDimension(unit, size, r.getDisplayMetrics());
	}
	
	/**
	 * 获取手机大小（分辨率）
	 * @param activity
	 * @return
	 */
	public static DisplayMetrics getScreenPix(Activity activity) {
		//DisplayMetrics 一个描述普通显示信息的结构，例如显示大小、密度、字体尺寸
        DisplayMetrics displaysMetrics = new DisplayMetrics();
        //获取手机窗口的Display 来初始化DisplayMetrics 对象
        //getManager()获取显示定制窗口的管理器。
        //获取默认显示Display对象
        //通过Display 对象的数据来初始化一个DisplayMetrics 对象
        activity.getWindowManager().getDefaultDisplay().getMetrics( displaysMetrics );
        return displaysMetrics;
	}
	
	public static String GetHostIp() {    
	    try {  
	        for (Enumeration<NetworkInterface> en = NetworkInterface  
	                .getNetworkInterfaces(); en.hasMoreElements();) {  
	            NetworkInterface intf = en.nextElement();  
	            for (Enumeration<InetAddress> ipAddr = intf.getInetAddresses(); ipAddr  
	                    .hasMoreElements();) {  
	                InetAddress inetAddress = ipAddr.nextElement();  
	                if (!inetAddress.isLoopbackAddress()) {                       
	                    return inetAddress.getHostAddress();  
	                }  
	            }  
	        }  
	    } catch (SocketException ex) {  
	    } catch (Exception e) {  
	    }  
	    return null;  
	} 
}
